package java.instancia;

import java.Argumento;
import java.atributo.Atributo;
import java.classe.ClasseEntidade;
import java.classe.TokensSource;
import java.util.ArrayList;



public class InstanciaObjeto extends Instancia implements TokensSource {

	ClasseEntidade classe;

	String alias = null;

	ListaArgumentos argumentos = null;

	public InstanciaObjeto() {
	}

	public InstanciaObjeto(ClasseEntidade classe) {
		this.classe = classe;
	}

	public InstanciaObjeto(Atributo atributo) throws Exception {
		this.alias = atributo.getNome();
		this.classe = atributo.getClasse();
	}

	public String codigoFonte() {
		String argumentos = this.argumentos == null ? NONVALUE
				: this.argumentos.codigoFonte();

		String alias = this.alias == null ? NONVALUE : this.alias + ESPACO
				+ IGUAL + ESPACO;

		return this.classe != null ? alias + CRIAR + ESPACO + classe.getNome()
				+ INICIOPARENTECE + argumentos + FIMPARENTECE : NULL;
	}

	public void addArgumento(Argumento argumento) {
		if (argumentos == null)
			argumentos = new ListaArgumentos();
		argumentos.add(argumento);
	}

	private class ListaArgumentos extends ArrayList<Argumento> {
		private static final long serialVersionUID = 8523144831962044459L;

		public String codigoFonte() {
			String s = get(0).codigoFonte();
			for (int i = 1; i < size(); i++) {
				s += ", " + get(i).codigoFonte();
			}
			return s;
		}
	}
}
